#include<list>
#include<iostream>
using namespace std;


int main()
{
    double a[] = {1, 2, 3, 4, 5, 6, 7};
    list<double> l(a, a+7);  // 确定一个容器需要两个信息，什么形状的容器，容器里装什么东西

    list<double>::iterator itr, p;
    for(itr = l.begin(); itr != l.end(); itr++)  // 这里不能用下标访问的方式
        cout << *itr << " ";
    cout << endl;

    l.assign(3, 7.77);
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;   

    p = l.begin();  // 一直指向原list中最初指向的那个元素
    l.insert(p, 3.33);
    l.insert(p, 6.66);
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl; 

    list<double>::iterator beg = l.begin();
    l.erase(beg, p);
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl; 

    l.clear();  // 清空

    l.push_front(7);  // 对两端操作
    l.push_front(14);
    l.push_front(21);
    l.push_front(28);
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl; 

    l.pop_back();
    l.pop_front();
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;

    l.push_back(49);
    l.sort();  // 按升序排列
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;

    list<double> l1(l);  // 拷贝构造函数
    l.merge(l1);  // 将两个列表合并并排序, 同时将l1清空！！！！
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;

    l.reverse();
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;

    l.remove(49);  // 将列表中值为49的元素全部删去
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;

    p = l.begin();
    p++;
    l1 = l;
    l.splice(p, l1);  // 将列表1中的所有元素插入到l的某个位置
    for(itr = l.begin(); itr != l.end(); itr++)
        cout << *itr << " ";
    cout << endl;
    return 0;
}